home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.4)
-
- '''
- Tests for the mhlib module
- Nick Mathewson
- '''
- import unittest
- from test.test_support import run_unittest, TESTFN, TestSkipped
- import os
- import StringIO
- import sys
- import mhlib
- if sys.platform.startswith('win') and sys.platform == 'riscos' or sys.platform.startswith('atheos'):
- raise TestSkipped('skipped on %s -- ' % sys.platform + 'too many Unix assumptions')
-
- _mhroot = TESTFN + '_MH'
- _mhpath = os.path.join(_mhroot, 'MH')
- _mhprofile = os.path.join(_mhroot, '.mh_profile')
-
- def normF(f):
- return os.path.join(*f.split('/'))
-
-
- def writeFile(fname, contents):
- dir = os.path.split(fname)[0]
- if dir and not os.path.exists(dir):
- mkdirs(dir)
-
- f = open(fname, 'w')
- f.write(contents)
- f.close()
-
-
- def readFile(fname):
- f = open(fname)
- r = f.read()
- f.close()
- return r
-
-
- def writeProfile(dict):
- contents = [ '%s: %s\n' % (k, v) for k, v in dict.iteritems() ]
- writeFile(_mhprofile, ''.join(contents))
-
-
- def writeContext(folder):
- folder = normF(folder)
- writeFile(os.path.join(_mhpath, 'context'), 'Current-Folder: %s\n' % folder)
-
-
- def writeCurMessage(folder, cur):
- folder = normF(folder)
- writeFile(os.path.join(_mhpath, folder, '.mh_sequences'), 'cur: %s\n' % cur)
-
-
- def writeMessage(folder, n, headers, body):
- folder = normF(folder)
- headers = []([ '%s: %s\n' % (k, v) for k, v in headers.iteritems() ])
- contents = '%s\n%s\n' % (headers, body)
- mkdirs(os.path.join(_mhpath, folder))
- writeFile(os.path.join(_mhpath, folder, str(n)), contents)
-
-
- def getMH():
- return mhlib.MH(os.path.abspath(_mhpath), _mhprofile)
-
-
- def sortLines(s):
- lines = s.split('\n')
- lines = _[1]
- lines.sort()
- return lines
-
-
- def mkdirs(fname):
- if os.path.exists(fname) or fname == '':
- return None
-
- (base, file) = os.path.split(fname)
- mkdirs(base)
- os.mkdir(fname)
-
-
- def deltree(fname):
- if not os.path.exists(fname):
- return None
-
- for f in os.listdir(fname):
- fullname = os.path.join(fname, f)
- if os.path.isdir(fullname):
- deltree(fullname)
- continue
-
- try:
- os.unlink(fullname)
- continue
- continue
-
-
-
- try:
- os.rmdir(fname)
- except:
- pass
-
-
-
- class MhlibTests(unittest.TestCase):
-
- def setUp(self):
- deltree(_mhroot)
- mkdirs(_mhpath)
- writeProfile({
- 'Path': os.path.abspath(_mhpath),
- 'Editor': 'emacs',
- 'ignored-attribute': 'camping holiday' })
- writeMessage('inbox', 1, {
- 'From': 'Mrs. Premise',
- 'To': 'Mrs. Conclusion',
- 'Date': '18 July 2001' }, 'Hullo, Mrs. Conclusion!\n')
- writeMessage('inbox', 2, {
- 'From': 'Mrs. Conclusion',
- 'To': 'Mrs. Premise',
- 'Date': '29 July 2001' }, 'Hullo, Mrs. Premise!\n')
- for i in range(5, 101) + range(101, 201, 2):
- writeMessage('wide', i, {
- 'From': 'nowhere',
- 'Subject': 'message #%s' % i }, 'This is message number %s\n' % i)
-
-
- def deep(folder, n):
- writeMessage(folder, n, {
- 'Subject': 'Message %s/%s' % (folder, n) }, 'This is message number %s in %s\n' % (n, folder))
-
- deep('deep/f1', 1)
- deep('deep/f1', 2)
- deep('deep/f1', 3)
- deep('deep/f2', 4)
- deep('deep/f2', 6)
- deep('deep', 3)
- deep('deep/f2/f3', 1)
- deep('deep/f2/f3', 2)
-
-
- def tearDown(self):
- deltree(_mhroot)
-
-
- def test_basic(self):
- writeContext('inbox')
- writeCurMessage('inbox', 2)
- mh = getMH()
- eq = self.assertEquals
- eq(mh.getprofile('Editor'), 'emacs')
- eq(mh.getprofile('not-set'), None)
- eq(mh.getpath(), os.path.abspath(_mhpath))
- eq(mh.getcontext(), 'inbox')
- mh.setcontext('wide')
- eq(mh.getcontext(), 'wide')
- eq(readFile(os.path.join(_mhpath, 'context')), 'Current-Folder: wide\n')
- mh.setcontext('inbox')
- inbox = mh.openfolder('inbox')
- eq(inbox.getfullname(), os.path.join(os.path.abspath(_mhpath), 'inbox'))
- eq(inbox.getsequencesfilename(), os.path.join(os.path.abspath(_mhpath), 'inbox', '.mh_sequences'))
- eq(inbox.getmessagefilename(1), os.path.join(os.path.abspath(_mhpath), 'inbox', '1'))
-
-
- def test_listfolders(self):
- mh = getMH()
- eq = self.assertEquals
- folders = mh.listfolders()
- folders.sort()
- eq(folders, [
- 'deep',
- 'inbox',
- 'wide'])
- folders = mh.listallfolders()
- folders.sort()
- tfolders = map(normF, [
- 'deep',
- 'deep/f1',
- 'deep/f2',
- 'deep/f2/f3',
- 'inbox',
- 'wide'])
- tfolders.sort()
- eq(folders, tfolders)
- folders = mh.listsubfolders('deep')
- folders.sort()
- eq(folders, map(normF, [
- 'deep/f1',
- 'deep/f2']))
- folders = mh.listallsubfolders('deep')
- folders.sort()
- eq(folders, map(normF, [
- 'deep/f1',
- 'deep/f2',
- 'deep/f2/f3']))
- eq(mh.listsubfolders(normF('deep/f2')), [
- normF('deep/f2/f3')])
- eq(mh.listsubfolders('inbox'), [])
- eq(mh.listallsubfolders('inbox'), [])
-
-
- def test_sequence(self):
- mh = getMH()
- eq = self.assertEquals
- writeCurMessage('wide', 55)
- f = mh.openfolder('wide')
- all = f.listmessages()
- eq(all, range(5, 101) + range(101, 201, 2))
- eq(f.getcurrent(), 55)
- f.setcurrent(99)
- eq(readFile(os.path.join(_mhpath, 'wide', '.mh_sequences')), 'cur: 99\n')
-
- def seqeq(seq, val):
- eq(f.parsesequence(seq), val)
-
- seqeq('5-55', range(5, 56))
- seqeq('90-108', range(90, 101) + range(101, 109, 2))
- seqeq('90-108', range(90, 101) + range(101, 109, 2))
- seqeq('10:10', range(10, 20))
- seqeq('10:+10', range(10, 20))
- seqeq('101:10', range(101, 121, 2))
- seqeq('cur', [
- 99])
- seqeq('.', [
- 99])
- seqeq('prev', [
- 98])
- seqeq('next', [
- 100])
- seqeq('cur:-3', [
- 97,
- 98,
- 99])
- seqeq('first-cur', range(5, 100))
- seqeq('150-last', range(151, 201, 2))
- seqeq('prev-next', [
- 98,
- 99,
- 100])
- lowprimes = [
- 5,
- 7,
- 11,
- 13,
- 17,
- 19,
- 23,
- 29]
- lowcompos = _[1]
- f.putsequences({
- 'cur': [
- 5],
- 'lowprime': lowprimes,
- 'lowcompos': lowcompos })
- seqs = readFile(os.path.join(_mhpath, 'wide', '.mh_sequences'))
- seqs = sortLines(seqs)
- eq(seqs, [
- 'cur: 5',
- 'lowcompos: 6 8-10 12 14-16 18 20-22 24-28 30',
- 'lowprime: 5 7 11 13 17 19 23 29'])
- seqeq('lowprime', lowprimes)
- seqeq('lowprime:1', [
- 5])
- seqeq('lowprime:2', [
- 5,
- 7])
- seqeq('lowprime:-2', [
- 23,
- 29])
-
-
- def test_modify(self):
- mh = getMH()
- eq = self.assertEquals
- mh.makefolder('dummy1')
- self.assert_('dummy1' in mh.listfolders())
- path = os.path.join(_mhpath, 'dummy1')
- self.assert_(os.path.exists(path))
- f = mh.openfolder('dummy1')
-
- def create(n):
- msg = 'From: foo\nSubject: %s\n\nDummy Message %s\n' % (n, n)
- f.createmessage(n, StringIO.StringIO(msg))
-
- create(7)
- create(8)
- create(9)
- eq(readFile(f.getmessagefilename(9)), 'From: foo\nSubject: 9\n\nDummy Message 9\n')
- eq(f.listmessages(), [
- 7,
- 8,
- 9])
- files = os.listdir(path)
- files.sort()
- eq(files, [
- '7',
- '8',
- '9'])
- f.removemessages([
- '7',
- '8'])
- files = os.listdir(path)
- files.sort()
- eq(files, [
- ',7',
- ',8',
- '9'])
- eq(f.listmessages(), [
- 9])
- create(10)
- create(11)
- create(12)
- mh.makefolder('dummy2')
- f2 = mh.openfolder('dummy2')
- eq(f2.listmessages(), [])
- f.movemessage(10, f2, 3)
- f.movemessage(11, f2, 5)
- eq(f.listmessages(), [
- 9,
- 12])
- eq(f2.listmessages(), [
- 3,
- 5])
- eq(readFile(f2.getmessagefilename(3)), 'From: foo\nSubject: 10\n\nDummy Message 10\n')
- f.copymessage(9, f2, 4)
- eq(f.listmessages(), [
- 9,
- 12])
- eq(readFile(f2.getmessagefilename(4)), 'From: foo\nSubject: 9\n\nDummy Message 9\n')
- f.refilemessages([
- 9,
- 12], f2)
- eq(f.listmessages(), [])
- eq(f2.listmessages(), [
- 3,
- 4,
- 5,
- 6,
- 7])
- eq(readFile(f2.getmessagefilename(7)), 'From: foo\nSubject: 12\n\nDummy Message 12\n')
- mh.deletefolder('dummy1')
- mh.deletefolder('dummy2')
- self.assert_('dummy1' not in mh.listfolders())
- self.assert_(not os.path.exists(path))
-
-
- def test_read(self):
- mh = getMH()
- eq = self.assertEquals
- f = mh.openfolder('inbox')
- msg = f.openmessage(1)
- eq(msg.getheader('From'), 'Mrs. Premise')
- eq(msg.getheader('To'), 'Mrs. Conclusion')
- lines = sortLines(msg.getheadertext())
- eq(lines, [
- 'Date: 18 July 2001',
- 'From: Mrs. Premise',
- 'To: Mrs. Conclusion'])
- lines = sortLines(msg.getheadertext((lambda h: len(h) == 4)))
- eq(lines, [
- 'Date: 18 July 2001',
- 'From: Mrs. Premise'])
- eq(msg.getbodytext(), 'Hullo, Mrs. Conclusion!\n\n')
- eq(msg.getbodytext(0), 'Hullo, Mrs. Conclusion!\n\n')
- msg.fp.close()
- del msg
-
-
-
- def test_main():
- run_unittest(MhlibTests)
-
- if __name__ == '__main__':
- test_main()
-
-